package com.yuanfeng.goods.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yuanfeng.commoms.dto.goods.*;
import com.yuanfeng.commoms.dto.shop.ArticleDTO;
import com.yuanfeng.commoms.vo.activity.ManjianzengzhePromotionContentQueryResultVO;
import com.yuanfeng.commoms.vo.base.BaseGoodsConfigVO;
import com.yuanfeng.commoms.vo.goods.*;
import com.yuanfeng.commoms.vo.shop.GdsShopDetailResultVO;
import com.yuanfeng.commoms.vo.shop.InvoiceSwitchEntityVO;
import com.yuanfeng.commoms.vo.shop.ManageShopSelfCatMenuVO;
import com.yuanfeng.goods.dto.*;
import com.yuanfeng.goods.entity.GoodsBaseEntity;
import com.yuanfeng.goods.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 商品表(GoodsBase)
 *
 * @since 2023-05-19 13:52:02
 */
@Mapper
public interface GoodsBaseMapper extends BaseMapper<GoodsBaseEntity> {

    /**
     * es 查询在售商品
     * @return
     */
    List<ArticleDTO> selectAll();

    /**
     * 根据CommonId 查询商品详情
     * @param commonId
     * @return
     */
    GoodsListQueryEsDTO selectByCommonIdEs(Integer commonId);

    /**
     * 根据goodsId 查询商品详情
     * @param goodsId
     * @return
     */
    GoodsListQueryEsDTO selectByGoodsIdEs(Integer goodsId);

    /**
     * 查询当前商品是否经销
     * @param shopId
     * @param supplierGoodsId
     * @return
     */
    Integer queryGoodsDealerInfo(@Param("shopId") String shopId, @Param("supplierGoodsId") Integer supplierGoodsId);

    /**
     * 查询经销商品配置信息
     * @param commonId
     * @return
     */
    BaseGoodsConfigVO queryDelayGoodsConfig(Integer commonId);

    /**
     * 更新商品点击量
     * @param goodsId
     */
    void updateGoodsClick(@Param("goodsId")String goodsId);

    /**
     * 更新商品收藏量
     * @param paraMap
     */
    void updateGoodsCollect(@Param("param")Map<String, String> paraMap);

    /**
     * 更新商品库存
     * @param wapGoodsSaleSumUpdate
     */
    void updateStock(@Param("param")WapGoodsSaleSumUpdateVO wapGoodsSaleSumUpdate);

    /**
     * 查询当前商品是否 参与秒杀活动
     * @param goodsId
     * @return
     */
    Integer querySeckillInfo(@Param("goodsId")Integer goodsId);

    /**
     * 查询商品信息
     * @param commonId
     * @return
     */
    List<ManageGdsBaseAddResultVO> selectByCommonId(@Param("commonId")Integer commonId);

    List<ManageGdsBaseAddResultVO> selectSpecValueByGoodsId(@Param("goodsId")Integer goodsId);

    /**
     * 查询商品规格信息
     * @param goodsId
     * @return
     */
    GdsBaseDetailResultVO selectByGoodsId(@Param("goodsId")Integer goodsId);


    /**
     * 订单购物车中获取商品信息
     *
     * @param goodsId
     * @return
     */
    ReceiveGoodsDetailsDTO selectCartMessage(@Param("goodsId") Integer goodsId);

    /**
     * 删除goods_base商品
     * @param commonIds
     */
    void updateCommonDel(@Param("commonIds") List<Integer> commonIds);

    /**
     * 删除goods_base商品
     * @param commonIdList
     * @return
     */
    int cancelDealerGoodsBase(@Param("commonIdList") List<Integer> commonIdList);

    /**
     * 查询出售中的商品规格列表
     * @param commonId
     * @return
     */
    List<ManageGoodsBaseListVO> selectByGoodsList(@Param("commonId") Integer commonId);

    /**
     * 查询出售中的商品规格列表 活动版
     * @param commonId
     * @return
     */
    List<ManageGoodsBaseListVO> selectByGoodsList3(@Param("commonId") Integer commonId);

    /**
     * 查询编辑秒杀商品的规格列表
     *
     * @param param
     * @return
     */
    List<ManageGoodsBaseListVO> querySeckillGoodsList(ManageCommonIdsDTO param);


    /**
     * 查询当前商品库存
     * @param goodId
     * @return
     */
    Integer queryGoodsStock(@Param("goodsId")Integer goodId);


    /**
     * 修改common库存
     * @param commonId
     * @param gateShopStock
     * @return
     */
    Integer updateCommonStock(@Param("commonId")Integer commonId,@Param("gateShopStock")Integer gateShopStock);


    /**
     * 修改common库存
     * @param commonId
     * @param gateShopStock
     * @return
     */
    Integer updateCommonStock2(@Param("commonId")Integer commonId,@Param("gateShopStock")Integer gateShopStock);


    /**
     * 修改base库存
     * @param param
     * @return
     */
    Integer updateGoodsBaseByCommonIdAndGoodsId(@Param("param") ManageGoodsBaseListResultDTO param);

    /**
     * 查询店铺信息
     * @param shopId
     * @return
     */
    GdbMerchantShopBaseVO selectByPrimaryKey(Integer shopId);

    /**
     * 查询规格id
     * @param gdsBase
     * @return
     */
    String selectByGoodsSpecValue(@Param("gdsBase") ManageGdsBaseAddParamvDTO gdsBase);

    /**
     * insertGdsBases 接口升级后续需要使用
     * @param gdsBase
     */
    void insertGdsBasesObj(ManageGdsBaseAddParamvDTO gdsBase);

    /**
     * 查询最后插入的goodsid值
     * @return
     */
    int getByGoodsId();

    /**
     * 更新商品状态
     * @param goodsIds
     * @param commonId
     */
    void updateGoodsIsShelves2(@Param("goodsIds") List<Integer> goodsIds, @Param("commonId") Integer commonId);


    /**
     * 修改商品
     * @param gdsBases
     */
    void updateGdsBasesBatch2Obj(ManageGdsBaseAddParamvDTO gdsBases);

    /**
     * 查询商品
     * @param commonId
     * @return
     */
    List<ManageGdsBaseAddResultVO> selectGoodsSpecBygoodsIsShelves(@Param("commonId") Integer commonId);

    /**
     * 判断是否是自己的商品
     * @param shopId
     * @param commonId
     * @return
     */
    Integer isMeGoods(@Param("shopId")String shopId,@Param("commonId")Integer commonId);

    /**
     * 分页查询所有商品信息
     * @param param
     * @return
     */
    IPage<PlatFormAllGoodsVO> selectByAllGoods(IPage<PlatFormAllGoodsVO> page , @Param("param") PlatFormAllGoodsDTO param);


    /**
     * 查询当前商品不同规格下的库存
     * @param commonId
     * @return
     */
    List<GoodsStockVO> selectStocks(@Param("commonId") Integer commonId);

    /**
     * 查询商品信息
     * @param commonId
     * @return
     */
    List<GoodsBaseVO> queryGoodsCommonId(@Param("commonId")Integer commonId);

    /**
     * 添加商品详情
     * @param goodsBaseList
     */
    void insertGoodsBase(@Param("records")List<GoodsBaseVO> goodsBaseList);

    /**
     * 根据分类和类型查询商品信息
     * @param catIdList
     * @param goodsType
     * @return
     */
    List<GoodsIdsQueryVO> selectByCatIds(@Param("catIdList") List<Integer> catIdList, @Param("goodsType") Integer goodsType);

    /**
     * 查询商品规格等详情
     * @param param
     * @return
     */
    List<GoodsDetailsDTO> selectCommodityDetails(@Param("param") GoodsDetailsDTO param);


    /**
     * 分页查询商品规格等详情
     * @param param
     * @return
     */
    IPage<GoodsDetailsDTO> selectCommodityDetailsByPage(IPage<GoodsDetailsDTO> page , @Param("param") GoodsDetailsDTO param);


    /*
     *查询红包下的商品列表
     */
    IPage<GoodsBaseEntity> selectGoodsDetailByRct(IPage<GoodsBaseEntity> page , @Param("param") Map<String, Object> param);

    /**
     * 查询商品信息
     * @param goodsCatLimitList
     * @return
     */
    List<WapHallGoodsQueryVO> selectByGoodsIds(@Param("goodsIds")List<Integer> goodsCatLimitList);

    /**
     * 更新基础商品
     *
     * @param map
     * @return
     */
    Integer updateGoodsBaseByMap(@Param("param") Map<String, Object> map);

    /**
     * 更新基础商品状态
     *
     * @param commonParam
     * @return
     */
    Integer updateGoodsBaseState(CommonShopStateDTO commonParam);

    /**
     * 分页查询积分商品
     *
     * @param page
     * @param param
     * @return
     */
    IPage<IntegraMallGoodsVO> queryIntegralGoodsAll(IPage<IntegraMallGoodsVO> page, @Param("param") Map<String, Object> param);


    /**
     * 更新基础商品状态集合
     *
     * @param param
     */
    void updateGoodsBaseStateList(@Param("param") PlatFormGoodsStateDTO param);


    /**
     * 根据commonId查询商品信息
     * @param commonId
     * @return
     */
    List<ReceiveGoodsDetailsVO> selectCartMessageByCommonId(@Param("commonId") Integer commonId);

    /**
     * 根据commonId查goodid
     * @param commonId
     * @return
     */
    List<Integer> selectGoodsId(@Param("commonId")Integer commonId);

    /**
     * 查询出售中的商品规格列表
     *
     * @param commonIds
     * @return
     */
    List<ManageGoodsBaseListResultDTO> selectByGoodsList2(@Param("commonIds") List<Integer> commonIds);


    /**
     * 覆盖调价
     * @param param
     */
    void updateGoodsPriceUni1(@Param("param") Map<String, Object> param);

    /**
     * 修改商品价格
     * @param param
     */
    void updateGoodsPriceSep(@Param("param") Map<String, Object> param);

    /**
     * 分别调价
     * @param map
     */
    void updateGoodsPriceSep2(@Param("param") Map<String, Object> map);

    /**
     * 修改goodsBase 价格
     * @param supperGoodsPrice
     */
    void updateGoodsPrice(@Param("param")SupperGoodsPriceDTO supperGoodsPrice);

    /**
     * 修改商品上下架状态
     * @param commonIds
     */
    void updateOnline(@Param("commonIds") List<Integer> commonIds);

    /**
     * 根据shopid查询
     *
     * @param shopId
     * @return
     */
    List<ManageShopSelfCatMenuVO> selectCustomCatByShopId(@Param("param")Integer shopId);


    /**
     * 根据shopid查询
     *
     * @param shopId
     * @return
     */
    List<ManageGoodsFormatVO> selectByShopId(@Param("param")Integer shopId);


    /**
     * 新增报表
     * @param map
     * @return
     */
    int insertReport(Map<String, Object> map);


    /**
     * 查询店铺信息
     * @param shopId
     * @return
     */
    GdsShopDetailResultVO selectShopDetailByShopId(Integer shopId);

    /**
     * 查询发票状态
     * @param param
     * @return
     */
    InvoiceSwitchEntityVO queryInvoiceSwitch(@Param("param") Map<Object, Object> param);


    /**
     * 查询满减赠折活动展示活动列表
     * @param commonId
     * @return
     */
    List<ManjianzengzhePromotionContentQueryResultVO> selectManjianzengzhePromotionContent(Integer commonId);


    /**
     * 查询分销商品信息
     * @param fxGoodsListRequest
     * @return
     */
    List<FXGoodsListVO> queryFxGoodsList(@Param("param") FxGoodsListDTO fxGoodsListRequest);

    /**
     * @param param
     * @return
     */
    List<WapCommonBaseUserFootVO> selectAppGuessLikeH5(@Param("param") GuessYouLikeQueryDTO param);

    /**
     * 查询店铺自定义商品分类
     *
     * @param userId
     * @return
     */
    List<Integer> selectCartGuessLikeGoods2(@Param("userId") String userId);



    /**
     * 查询商品海报
     *
     * @param
     * @return
     */
    GoodsPosterVO getGoodsPoster(@Param("goodsId") Integer goodsId);


    /**
     * 查询会员等级折扣
     *
     * @param shopId
     * @param userId
     * @return
     */
    Integer getDiscountByShopAndUserId(@Param("shopId") Integer shopId, @Param("userId") String userId);


    /**
     * 根据会员等级,shopid查询会员折扣
     *
     * @param shopId
     * @return
     */
    Integer getDiscountByShopId(@Param("shopId") Integer shopId);


    /**
     * 新增商品信息
     * @param record
     * @return
     */
    int insertSelective(GdbMerchantGoodsBaseVO record);

    /**
     * 分页查询活动专区商品
     *
     * @param param
     * @return
     */
    IPage<GoodsRecResultDetailVO> selectNoneGoods(IPage<GoodsRecResultDetailVO> page , @Param("param") NoneGoodsQueryDTO param);

    /**
     * 更新商品库存
     * @param gdsBaseAddParam
     */
    void updateDealerGoodsBase(@Param("gdsBases")ManageGdsBaseAddParamvDTO gdsBaseAddParam);

    /**
     * 查询经销商品规格信息
     * @param goodsId
     * @return
     */
    GoodsBaseVO queryByGoodsId(@Param("goodsId")Integer goodsId);

    /**
     * 新增商品信息
     * @param goodsBase
     * @return
     */
    void insertDealerGdsBases(GoodsBaseVO goodsBase);

    /**
     * 增加库存
     * @param supperGoods
     */
    void updateAddStock(@Param("param") WapGoodsSaleSumUpdateVO supperGoods);
}

